package com.me.myFramework.myAop.aop130.intercept.method;

import com.me.myFramework.myAop.aop130.advice.method.AfterReturningAdvice;

import java.lang.reflect.Method;

/**
 * 自己实现 AOP-130：  <p></p>
 *
 * MethodBeforeAdviceInterceptor 中的 before() 进一步抽离到 advice接口。
 * 把 模板方法 和 用户自定义的增强逻辑彻底分离开，同时需要另外定义一个容器（ProxyFactory）接收 用户定义的增强逻辑、目标对象
 *
 * @author ME
 * @date 2021/9/26
 */
public class AfterReturningAdviceInterceptor implements MethodInterceptor {

    private final AfterReturningAdvice advice;

    public AfterReturningAdviceInterceptor(AfterReturningAdvice advice) {
        this.advice = advice;
    }

    @Override
    public Object invoke(Method method, Object[] args, Object target) throws Throwable {
        Object retVal = method.invoke(target, args);
        this.advice.afterReturning(retVal, method, args, target);
        return retVal;
    }

}
